#ifndef __AD9910_H__
#define __AD9910_H__

#include "main.h"

#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long int

#include <stdint.h>
typedef uint32_t u32;
typedef uint16_t u16;

typedef enum
{
    TRIG_WAVE = 0,
    SQUARE_WAVE,
    SINC_WAVE,
} AD9910_WAVE_ENUM;

// #define AD9910_PWR PEout(2)
// #define AD9910_SDIO PEout(3)
// #define DRHOLD PEout(4)
// #define DROVER PEout(5)
// #define UP_DAT PEout(6)
// #define PROFILE1 PFout(6)
// #define MAS_REST PFout(7)
// #define SCLK PFout(8)
// #define DRCTL PFout(9)
// #define OSK PBout(4)
// #define PROFILE0 PBout(7)
// #define PROFILE2 PBout(8)
// #define CS PBout(6)

/*H7????*/
#define AD9910_PWR_GPIO_Port GPIOE
#define AD9910_PWR_Pin GPIO_PIN_2
#define AD9910_SDIO_GPIO_Port GPIOE
#define AD9910_SDIO_Pin GPIO_PIN_3
#define AD9910_DRHOLD_GPIO_Port GPIOE
#define AD9910_DRHOLD_Pin GPIO_PIN_4
#define AD9910_DROVER_GPIO_Port GPIOE
#define AD9910_DROVER_Pin GPIO_PIN_5
#define AD9910_UP_DAT_GPIO_Port GPIOE
#define AD9910_UP_DAT_Pin GPIO_PIN_6
#define AD9910_PROFILE1_GPIO_Port GPIOF
#define AD9910_PROFILE1_Pin GPIO_PIN_6
#define AD9910_MAS_REST_GPIO_Port GPIOF
#define AD9910_MAS_REST_Pin GPIO_PIN_7
#define AD9910_SCLK_GPIO_Port GPIOF
#define AD9910_SCLK_Pin GPIO_PIN_8
#define AD9910_DRCTL_GPIO_Port GPIOF
#define AD9910_DRCTL_Pin GPIO_PIN_9
#define AD9910_OSK_GPIO_Port GPIOB
#define AD9910_OSK_Pin GPIO_PIN_4
#define AD9910_PROFILE0_GPIO_Port GPIOB
#define AD9910_PROFILE0_Pin GPIO_PIN_7
#define AD9910_PROFILE2_GPIO_Port GPIOB
#define AD9910_PROFILE2_Pin GPIO_PIN_8
#define AD9910_CS_GPIO_Port GPIOB
#define AD9910_CS_Pin GPIO_PIN_6

#define AD9910_PWR_0 HAL_GPIO_WritePin(AD9910_PWR_GPIO_Port, AD9910_PWR_Pin, GPIO_PIN_RESET)                // ????
#define AD9910_SDIO_0 HAL_GPIO_WritePin(AD9910_SDIO_GPIO_Port, AD9910_SDIO_Pin, GPIO_PIN_RESET)             // ????
#define AD9910_DRHOLD_0 HAL_GPIO_WritePin(AD9910_DRHOLD_GPIO_Port, AD9910_DRHOLD_Pin, GPIO_PIN_RESET)       // ????
#define AD9910_DROVER_0 HAL_GPIO_WritePin(AD9910_DROVER_GPIO_Port, AD9910_DROVER_Pin, GPIO_PIN_RESET)       // ????
#define AD9910_UP_DAT_0 HAL_GPIO_WritePin(AD9910_UP_DAT_GPIO_Port, AD9910_UP_DAT_Pin, GPIO_PIN_RESET)       // ????
#define AD9910_PROFILE1_0 HAL_GPIO_WritePin(AD9910_PROFILE1_GPIO_Port, AD9910_PROFILE1_Pin, GPIO_PIN_RESET) // ????
#define AD9910_MAS_REST_0 HAL_GPIO_WritePin(AD9910_MAS_REST_GPIO_Port, AD9910_MAS_REST_Pin, GPIO_PIN_RESET) // ????
#define AD9910_SCLK_0 HAL_GPIO_WritePin(AD9910_SCLK_GPIO_Port, AD9910_SCLK_Pin, GPIO_PIN_RESET)           // ????
#define AD9910_DRCTL_0 HAL_GPIO_WritePin(AD9910_DRCTL_GPIO_Port, AD9910_DRCTL_Pin, GPIO_PIN_RESET)          // ????
#define AD9910_OSK_0 HAL_GPIO_WritePin(AD9910_OSK_GPIO_Port, AD9910_OSK_Pin, GPIO_PIN_RESET)                // ????
#define AD9910_PROFILE0_0 HAL_GPIO_WritePin(AD9910_PROFILE0_GPIO_Port, AD9910_PROFILE0_Pin, GPIO_PIN_RESET) // ????
#define AD9910_PROFILE2_0 HAL_GPIO_WritePin(AD9910_PROFILE2_GPIO_Port, AD9910_PROFILE2_Pin, GPIO_PIN_RESET) // ????
#define AD9910_CS_0 HAL_GPIO_WritePin(AD9910_CS_GPIO_Port, AD9910_CS_Pin, GPIO_PIN_RESET)                   // ????

#define AD9910_PWR_1 HAL_GPIO_WritePin(AD9910_PWR_GPIO_Port, AD9910_PWR_Pin, GPIO_PIN_SET)          // ????
#define AD9910_SDIO_1 HAL_GPIO_WritePin(AD9910_SDIO_GPIO_Port, AD9910_SDIO_Pin, GPIO_PIN_SET)       // ????
#define AD9910_DRHOLD_1 HAL_GPIO_WritePin(AD9910_DRHOLD_GPIO_Port, AD9910_DRHOLD_Pin, GPIO_PIN_SET) // ????
#define AD9910_DROVER_1 HAL_GPIO_WritePin(AD9910_DROVER_GPIO_Port, AD9910_DROVER_Pin, GPIO_PIN_SET) // ????
#define AD9910_UP_DAT_1 HAL_GPIO_WritePin(AD9910_UP_DAT_GPIO_Port, AD9910_UP_DAT_Pin, GPIO_PIN_SET) // ????
#define AD9910_CS_1 HAL_GPIO_WritePin(AD9910_CS_GPIO_Port, AD9910_CS_Pin, GPIO_PIN_SET)
#define AD9910_PROFILE1_1 HAL_GPIO_WritePin(AD9910_PROFILE1_GPIO_Port, AD9910_PROFILE1_Pin, GPIO_PIN_SET) // ????
#define AD9910_MAS_REST_1 HAL_GPIO_WritePin(AD9910_MAS_REST_GPIO_Port, AD9910_MAS_REST_Pin, GPIO_PIN_SET) // ????
#define AD9910_SCLK_1 HAL_GPIO_WritePin(AD9910_SCLK_GPIO_Port, AD9910_SCLK_Pin, GPIO_PIN_SET)             // ????
#define AD9910_DRCTL_1 HAL_GPIO_WritePin(AD9910_DRCTL_GPIO_Port, AD9910_DRCTL_Pin, GPIO_PIN_SET)          // ????
#define AD9910_OSK_1 HAL_GPIO_WritePin(AD9910_OSK_GPIO_Port, AD9910_OSK_Pin, GPIO_PIN_SET)                // ????
#define AD9910_PROFILE0_1 HAL_GPIO_WritePin(AD9910_PROFILE0_GPIO_Port, AD9910_PROFILE0_Pin, GPIO_PIN_SET) // ????
#define AD9910_PROFILE2_1 HAL_GPIO_WritePin(AD9910_PROFILE2_GPIO_Port, AD9910_PROFILE2_Pin, GPIO_PIN_SET) // ????
#define AD9910_CS_1 HAL_GPIO_WritePin(AD9910_CS_GPIO_Port, AD9910_CS_Pin, GPIO_PIN_SET)                   // ????

void AD9110_IOInit(void);
void Init_AD9910(void);
void AD9910_FreWrite(ulong Freq); // ??????
void AD9910_AmpWrite(uint16_t Amp);
void AD9910_RAM_WAVE_Set(AD9910_WAVE_ENUM wave);

void AD9910_DRG_AMP_Init(void);

void AD9910_DRG_FreInit_AutoSet(FunctionalState autoSweepEn);
void AD9910_DRG_FrePara_Set(u32 lowFre, u32 upFre, u32 posStep, u32 negStep, u16 posRate, u16 negRate);

#endif
